﻿/**
 * \brief TCP任务类
 * \file CTcpTask.cc
 */

#include "CTcpTaskPool.h"
#include "CTcpTask.h"

CTcpTask::CTcpTask(int _sockfd, CTcpTaskPool* _pPool) : _M_socket(_sockfd)
{
	this->_M_pool = _pPool;
}

CTcpTask::~CTcpTask()
{
}

/**
 * \brief 加入EPOLL事件
 * \param _epollfd: epoll fd
 * \param _events: epoll 事件
 * \param _ptr: epoll 数据
 */
int CTcpTask::addEpoll(int _epollfd, __uint32_t _events, void* _ptr)
{
	return this->_M_socket.addEpoll(_epollfd, _events, _ptr);
}

/**
 * \brief 删除EPOLL事件
 * \param _epollfd：epoll fd
 * \param _events：epoll 事件
 */
int CTcpTask::delEpoll(int _epollfd, __uint32_t _events)
{
	return this->_M_socket.delEpoll(_epollfd, _events);
}

/**
 * \brief 逻辑线程发送数据接口
 * \param _pCmd：消息指针
 * \param _len：长度
 */
void CTcpTask::sendCmd(void* _pCmd, int _len)
{
	this->_M_socket.send_to_buff(_pCmd, _len);
}

/**
 * \brief 接收数据
 */
void CTcpTask::onRecv()
{
	/// 从系统读缓冲中读出数据
	this->_M_socket.recv_buff();

	unsigned char pData[_MAX_PACKET_DATA_SIZE];
	/// bzero(pData, sizeof(pData));
	unsigned int size = 0;

	/// 从缓冲区中读出数据
	while((size = this->_M_socket.recv_from_buff(pData, sizeof(pData))) > 0)
	{
		/// 写入消息队列中
		this->_M_recvMsgQue.push(pData, size);
		size = 0;
		/// bzero(pData, sizeof(pData));
	}
}

/**
 * \brief 发送数据
 */
void CTcpTask::onSend()
{
	this->_M_socket->send_buff();
}

/**
 * \brief 检测验证超时
 */
bool CTcpTask::checkVerifyTimeOut()
{
	if(this->_M_checkVerifyTime >= _MAX_CHECK_VERIFY_TIME)
	{
		return true;
	}

	++this->_M_checkVerifyTime;
	return false;
}

/// 是否是终止状态
bool CTcpTask::isTerminal()
{
	return this->_M_terminal;
}

/// 设置为终止状态
void CTcpTask::setTerminal()
{
	this->_M_terminal = true;
}


